import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.BlockingQueue;

//阻塞队列(普通队列和优先级队列会线程不安全)
//先进先出 线程安全,并且有阻塞功能
//1.队列为空,尝试出队列,出队列操作就会阻塞,一直阻塞到队列不空为止
//2.队列为满,尝试入队列,入队列操作就会阻塞,一直阻塞到队列不满位置
//消息队列
//通过 topic 这样的参数对数据进行分类,出队列时,指定topic,每个topic下的数据是先进先出的
public class Demo2 {
    public static void main(String[] args) throws InterruptedException {
        BlockingQueue<String> queue = new ArrayBlockingQueue<>(100);//泛型参数标识,队列里面要放的元素类型
        //与一般队列不同,使用的是 put 和 take
        queue.put("aaa");//因为 put 操作可能会阻塞,所以会抛出异常
        //阻塞过程中,如果其他线程尝试使用 interrupt 来终止被阻塞的线程,此时 put 就能够返回,并抛出异常
        String elem = queue.take();
        System.out.println("elem = "+elem);
        elem=queue.take();//被阻塞,直到其他线程为队列添加元素为止
        System.out.println("elem = "+elem);
    }
}
